/*
    去重方法封装的方法
      filter：
        item： 数组中当前正在处理的元素
        index：正在处理的元素在数组中的索引
        arr：  调用了 filter 的数组本身
      indexOf：
        item:  要查找的元素
        0:     开始查找的位置。
   */
export function unique(arr) {
  return arr.filter(function (item, index, arr) {
    //从数组索引为0的位置进行查询，如果数组里面有重复的就将其索引设置为从数组最先查到的位置
    return arr.indexOf(item, 0) === index;
  });
}


/* 防抖 */
export function dabounce(func, delay) {
  let timer = null
  return function (...args) {
    if (timer) clearInterval(timer)
    timer = setInterval(() => {
      func.apply(this, args)
    }, delay)
  }
}



/* str：【"2016-11-11"】这种格式的字符
   return ：返回年龄
*/
export  function getAge(str) {
  var r = str.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/);
  if (r == null)
    return false;
  var d = new Date(r[1], r[3] - 1, r[4]);
  if (d.getFullYear() == r[1] && (d.getMonth() + 1) == r[3]
      && d.getDate() == r[4]) {
    var Y = new Date().getFullYear();
    return (Y - r[1]);
  }
  return "";
}



/* y：【"1997"】这种格式的字符产
   m：【"11"】这种格式的字符产
   d：【"16"】这种格式的字符产

   return: 返回对应的星座
*/
export function getAstro(y, m, d) {
  var constellations = [ {
    "Start" : 121,
    "End" : 220,
    "Name" : "水平座"
  }, {
    "Start" : 221,
    "End" : 320,
    "Name" : "双鱼座"
  }, {
    "Start" : 321,
    "End" : 420,
    "Name" : "白羊座"
  }, {
    "Start" : 421,
    "End" : 520,
    "Name" : "金牛座"
  }, {
    "Start" : 521,
    "End" : 620,
    "Name" : "双子座"
  }, {
    "Start" : 621,
    "End" : 720,
    "Name" : "巨蟹座"
  }, {
    "Start" : 721,
    "End" : 820,
    "Name" : "狮子座"
  }, {
    "Start" : 821,
    "End" : 920,
    "Name" : "处女座"
  }, {
    "Start" : 921,
    "End" : 1020,
    "Name" : "天秤座"
  }, {
    "Start" : 1021,
    "End" : 1120,
    "Name" : "天蝎座"
  }, {
    "Start" : 1121,
    "End" : 1220,
    "Name" : "射手座"
  } ];
  /*
   * 判断日期有效性 1,3,5,7,8,10,12为31天 2月润年29，非润年28 4,6,9,11为30天
   */
  var daysInMonth = [ 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ];

  // 检测年份
  if (y < 1970 || y > 2099)
    return "";

  // 检测月份
  if (m < 1 || m > 12)
    return "";

  // 检测日期
  var mDays = daysInMonth[m - 1];
  // 如果是二月，要根据年份计算天数，不是二月时略过此计算
  if (m == 2) {
    mDays = GetSpecialDays(y)
  }

  // 判断日数据是不是在月份的有效天范围
  if (d < 0 || d > mDays)
    return "";
  // 好了，走到这一步，说明上面的验证都TM过了。
  // 这才判断是哪一个星座
  // 星座座标等于m*100 + d
  var pos = parseInt(m*100) + parseInt(d);
  for ( var i in constellations) {
    if (pos >= constellations[i].Start && pos <= constellations[i].End) {
      return constellations[i].Name;
    }
  }
}







